package com.juzi.operator;

public class OperatorDemo7 {
    public static void main(String[] args) {
        //目标： 学会使用逻辑运算符，并能够选择合适的逻辑运算符解决问题
        double size = 9.8;
        double storage = 6;
        //需求 ： 尺寸大于等于 6.95 内存要大于等于 8GB
        //注意 ： 必须前后都时true 结果才是true
        System.out.println(size >= 6.95 & storage >= 8);

        //需求 ： 要么内存大于等于8 要么尺寸 大于等于6.95
        //注意 ： 只要有一个是 true 结果就一定是true
        System.out.println(size >=6.95 | storage >= 8);

        //逻辑非
        System.out.println(!true);
        System.out.println(!false);

        //逻辑异或：必须两个不同结果才是true
        System.out.println(false ^ true);
        System.out.println(true ^ false);
        System.out.println(false ^ false);
        System.out.println(true ^ true);

        System.out.println("-----------------&&  &  ||  |的区别----------------");

        System.out.println("符号      介绍                  说明\n" +
                           "&&      短路与   判断结果与“&”一样。过程是左边为 false，右边则不执行");
        System.out.println("||      短路或   判断结果与“|”一样。过程是左边为 true， 右边则不执行");
        System.out.println("注意：逻辑与 “&” 、逻辑或“|”:   无论左边是 false还是 true，右边都要执行");
        System.out.println("既想知道结果，又想让后边执行，才用单与和单或");
        int a = 10;
        int b = 20;
        System.out.println(a > 100 && ++b > 10);
//        System.out.println(a > 100 & ++b > 10);//b=21
        System.out.println(b);

        int i = 10;
        int j = 20;
//        System.out.println(i > 2 || ++j > 10);//j = 20
        System.out.println(i > 2 | ++j > 10);
        System.out.println(j);
        //实际开发中使用双与 双或还是比较多的，既想看结果，又想前后都执行，那就用单与和单或


        System.out.println("        逻辑与“&” ：有一个为false、结果是false\n" +
                "        短路与&&： 一个为false、结果是false。前一个为false,后一个条件不执行了\n" +
                "        逻辑或“|”：有一个为true、结果是true\n" +
                "        短路或||：一个为true、结果是true。前一个为true，后一个条件不执行了\n" +
                "        逻辑非“!”：!false=true、 !true=false\n" +
                "        逻辑异或“^” ：相同是false、不同是true。\n" +
                "        注意：实际开发中、常用的逻辑运算符还是：&& 、 || 、 !");

    }
}
